package ali;

/**
 *
 * @author wxh
 */
public class Solution_10 {

	public String reverseWords(String s) {
		StringBuffer result = new StringBuffer();
		int length = s.length();
		int i = 0;

		while (i < length) {
			int start = i; //记录单词的起始字符

			// 1、以空格为结尾，遍历找到一个完整的单词
			// tips：由于每次循环都会i++，因此遍历到最后一个单词的最后一个字符时，i++后大于字符串长度，此处如果不判断i是否小于length，则s.charAt(i)会报字符串越界
			while (i < length && s.charAt(i) != ' ') {
				i++; // 每次遍历，i后移一位，最终i指向单词的最后一个字符
			}

			// 2、从单词起始位置开始，遍历整个单词
			int pos = i - 1; //指向单词最后一个字符串（减一是排除单词后面的' '）
			for (int j = start; j < i; j++) {
				result.append(s.charAt(pos--)); // 倒叙将字符插入到新字符串
			}

			// 3、倒叙完一个单词后，加一个空格，由于原始字符串中，单词后面可能存在多个空格，所以此处用while循环
			while (i < length && s.charAt(i) == ' ') {
				i++;
				result.append(' ');
			}
		}
		return result.toString();
	}

	public static void main(String[] args) {
		Solution_10 solution_10 = new Solution_10();
		System.out.println(solution_10.reverseWords("Let's take LeetCode contest"));
	}

}